;void liberar_lista(Lista* l);

;extern "C" void liberar_lista(Lista* l);

;Recorrer la lista nodo a nodo. En cada iteracion del ciclo voy a borrar el
;nodo actual. Este surge de reapuntar los punteros cada vez que borro.
;Esto se hace hasta apuntar a lista vacia.

;nota: para borrar a un nodo se llama a free. (free sabe cuanto libera, por el 
;malloc llamado en alguún momento para crear el nodo.

;nota2: dado que borro toda la lista con ir en una sola direccion alcanza. Osea
;no necesito reapuntar el puntero al anterior.

;include nodo.h

%define tam_nodo 28; Este es el tamanio del nodo

%define off_ID 0; Uint32	ID;
%define	off_p_surfaceGen 4; SDL_Surface	*surfaceGen;
%define	off_p_surfacePers 8; SDL_Surface *surfacePers;
%define off_coord_x 12; Uint32	coord_x;
%define	off_coord_y 16; Uint32	coord_y;
%define	off_p_prox 20; Nodo*	prox;
%define	off_p_prev 24; Nodo*	pre


extern free
global liberar_lista

%define p_lista [ebp + 8]

liberar_lista:
	push ebp
	mov ebp, esp
	push edi
	push esi

	mov esi, p_lista
	mov edi, [esi] 

borrarLista:	
	cmp edi, 0 ; me fijo si la lista es vacia.
	je fin ; ya vacie la lista
	
borrarNodoActual:
	mov esi, [edi + off_p_prox]	; esi = siguiente
	push edi; le da el puntero para liberarlo
	call free
	add esp, 4  ; para restaurar la pila
	mov edi, esi
	jmp borrarLista

fin:
	mov esi, p_lista
	mov dword[esi], 0
	pop esi
	pop edi
	pop ebp
	ret					
	
